namespace('js.lang');

js.lang.Class = function(canonicalClassName, _abstract, methods) {
  this._canonicalClassName = canonicalClassName;
  var parts = this._canonicalClassName.split('.');
  this._className = parts[parts.length - 1];
  this._packageName = parts.splice(0, parts.length - 1).join('.');
  this._abstract = _abstract;
  this._methods = methods || [];
};

js.lang.Class.prototype = {
  getCanonicalClassName: function() {
    return this._canonicalClassName;
  },

  getClassName: function() {
    return this._className;
  },

  getPackageName: function() {
    return this._packageName;
  },

  isAbstract: function() {
    return this._abstract;
  },

  getAbstractMethods: function() {
    return this._abstractMethods;
  },

  getMethods: function() {
    return this._methods;
  }
};